ÇÕÇ∂ÇflÇ…
ÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇÕDZÇÍÇ‹Ç≈ÅAǪÇÃîwå„DždžÇÈÉEÉCÉìÉhÉEÇ…ä÷òAǵÇΩÇ¢Ç≠ǬǩÇÃñ‚ëËÇÃå¥àˆÇ…ǻǡǃǴNjǵÇΩÅBModalDialog
ÇÕÅAÉfÉtÉHÉãÉgÇÃê›íËÇ≈ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉCÉxÉìÉgÉãÅ[ÉvÇΔã¶í≤ìIÇ…ìÆçÏǵǻǢìΔé©ÇÃÉCÉxÉìÉgÉãÅ[ÉvÇéùǡǃǢÇÈÇΩÇflÅAModalDialog
ÉãÅ[ÉvÇ…ì¸Ç¡ÇƒÇ¢ÇÈÇΔÇ´Ç…ÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìì‡ÇÃëºÇÃÉEÉCÉìÉhÉEÇ…çXêVÇ™î≠ê∂ǵÇΩDZÇΔÇê≥ǵÇ≠îFéØÇ≈ǴǻǢâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅB
ÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇ…ëŒÇ∑ÇÈÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇèëÇ¢ÇΩåoå±ÇÃdžÇÈÉfÉxÉçÉbÉpÇ»ÇÁÅAǮǪÇÁÇ≠DZÇÃñ‚ëËÇÇ∑Ç≈Ç…åoå±ÇµÇƒÇ¢ÇÈÇÕÇ∏Ç≈Ç∑ÅBÉtÉBÉãÉ^ÇÕçXêVÉCÉxÉìÉgÇÃífë±ìIÇ»ÉXÉgÉäÅ[ÉÄÇéÊìæÇµÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉCÉxÉìÉgÇÕÉ_ÉCÉAÉçÉOÇ…ëŒÇ∑ÇÈLJÇÃÇ≈ÇÕÇ»Ç≠ÅAÉ_ÉCÉAÉçÉOÇÃîwå„DždžÇÈÉEÉCÉìÉhÉEÇ…ëŒÇ∑ÇÈLJÇÃÇ≈džÇËÅADZÇÍÇÁÇÃÉEÉCÉìÉhÉEÇÕÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇ™ç≈ëOñ DždžÇÈÇΩÇflçXêVÇ≥ÇÍÇ‹ÇπÇÒÅBÉCÉxÉìÉgÇÕí èÌÇÃÉCÉxÉìÉgÉãÅ[ÉvåoóRÇ≈èàóùÇ≥ÇÍÇ‹ÇπÇÒÅBÇ‹ÇΩÅAÉ_ÉCÉAÉçÉOÇ…ëŒÇ∑ÇÈÉCÉxÉìÉgÇÃǛDžǩǩÇÌǡǃǢÇÈÇΩÇflÅAǮǪÇÁÇ≠çXêVÇíÒãüÇ∑ÇÈDZÇΔLJǻǢÇÕÇ∏Ç≈Ç∑ÅBDZÇÍÇ…ÇÊÇËÅAçXêVÉCÉxÉìÉgÇ™çƒëóêMÇ≥ÇÍë±ÇØÇÈÇΔǢǧñ‚ëËÇ™î≠ê∂ǵNjÇ∑ÅBçXêVÇí‚é~Ç∑ÇÈÇΩÇæ
1
ǬÇÃï˚ñ@ÇÕÅAâeãøÇéÛÇØÇÈÉEÉCÉìÉhÉEÇÃçXêVóÃàÊÇï`âÊÉãÅ[É`ÉìÇÃ
Begin/EndUpdate åƒÇ—èoǵDžÇÊǡǃÉNÉäÉAÇ∑ÇÈDZÇΔÇ≈Ç∑
(ÅwInside
Macintosh:Mactintosh Toolbox EssentialsÅxÇÃÅuHandling Update
EventsÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢)ÅB
DZÇÃèÛãµÇÕÅAÉXÉNÉäÅ[ÉìÉZÅ[ÉoÅ[Ç‚ÉoÉãÅ[ÉìÉwÉãÉvÇ…ÇÊǡǃÇ≥ÇÁÇ…à´âªÇµÇ‹Ç∑ÅBÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇ™ï\é¶Ç≥ÇÍǃǢÇÈÇΔÇ´Ç…ÉXÉNÉäÅ[ÉìÉZÅ[ÉoÅ[Ç™ÉAÉNÉeÉBÉuDžǻǡÇΩÇËÅAÉÜÅ[ÉUÇ™ÉoÉãÅ[ÉìÉwÉãÉvÇégǡǃǢǃÅAÉ_ÉCÉAÉçÉOÇÃîwå„DždžÇÈÉEÉCÉìÉhÉEÇÃàÍïîÇ™ÉoÉãÅ[ÉìÇ…ÇÊǡǃâBÇ≥ÇÍÇÈèÍçáÅAÉEÉCÉìÉhÉEÇ…ëŒÇ∑ÇÈçXêVÉCÉxÉìÉgÇ™ê∂ê¨Ç≥ÇÍÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
çXêVÇΔ
ModalDialog
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ëŒÇ∑ÇÈçXêVÉCÉxÉìÉgÇÃÉyÉìÉfÉBÉìÉOÇ™ë∂ç›Ç∑ÇÈèÍçáÅAëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÅAÉhÉâÉCÉoÅAÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÅAdžÇÈÇ¢ÇÕǪÇÃëºÇÃÉvÉçÉZÉXÇÕéûä‘ÇéÊìæÇµÇ»Ç≠Ç»ÇËÇ‹Ç∑ÅB
ëºÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ëŒÇ∑ÇÈçXêVÇÃÉyÉìÉfÉBÉìÉOÇÕàÍî Ç…ñ‚ëËÇÃå¥àˆÇΔÇÕÇ»ÇËÇ‹ÇπÇÒ
(ǪÇÍÇÁLJNjÇΩçXêVÇÃÉyÉìÉfÉBÉìÉOÇÃâeãøÇéÛÇØÇƒÇ¢Ç»Ç¢Ç©Ç¨ÇË)ÅBDZÇÍÇÁÇÃçXêVÇÕÅAÉoÉbÉNÉOÉâÉEÉìÉhÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÊǡǃí èÌí ÇËÇ…èàóùÇ≥ÇÍÇ‹Ç∑ÅBçXêVÇíÒãüÇµÇ»ÇØÇÍÇŒÅAëºÇÃÉvÉçÉZÉXÇÕéûä‘ÇéÊìæÇµÇ»Ç≠Ç»ÇËÇ‹Ç∑ÅB
DZÇÃDZÇΔÇ™êˆç›ìIÇ»ñ‚ëËÇÃå¥àˆÇ…Ç»ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÉRÅ[ÉhÇÃëΩÇ≠ÇÃïîï™ÇÕÅAê≥èÌÇ…ìÆçÏǵÇΩÇËÅAÉlÉbÉgÉèÅ[ÉNê⁄ë±Çà€éùǵÇΩÇËÅAdžÇÈÇ¢ÇÕê≥èÌÇ»âÊñ ï\é¶ÇçsǧÇΩÇflÇ…éûä‘ÇïKóvÇΔǵNjÇ∑ÅB
íPèÉÇ»ó·ÇÕÅuÉZÉåÉNÉ^ÅvÇ≈Ç∑ÅBÅuÉZÉåÉNÉ^ÅvÇëIëǵÇΩå„ÅAÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇéùǬÉAÉvÉäÉPÅ[ÉVÉáÉìÇãNìÆÇµÇƒÇ›ÇƒÇ≠ÇæÇ≥Ç¢ÅBÅuÉZÉåÉNÉ^ÅvÇìKêÿÇ»à íuÇ…à⁄ìÆÇ∑ÇÍÇŒÅAÉoÉbÉNÉOÉâÉEÉìÉhDždžÇÈä‘Ç≈LJÅAǪÇÃÉäÉXÉgÇ™çXêVÇ≥ÇÍÇÈDZÇΔÇ…ãCÇ√Ç≠ÇÕÇ∏Ç≈Ç∑ÅB
DZDZÇ≈ÅAç≈ëOñ DždžÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìì‡Ç≈èëófiÉEÉCÉìÉhÉEÇ™äJǢǃǢÇÈDZÇΔÇämîFǵÅAÅuÉwÉãÉvÅvÉÅÉjÉÖÅ[ÇÃÅuÉoÉãÅ[Éìï\é¶ÅvÇÉIÉìDžǵNjÇ∑ÅB
ÉAÉvÉäÉPÅ[ÉVÉáÉìì‡Ç≈ÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇäJÇ´Ç‹Ç∑
(ÇΩǢǃǢÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÅu...
DžǬǢǃÅvÉ_ÉCÉAÉçÉOÇÕÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇΔǵǃìÆçÏǵNjÇ∑)ÅBDZDZÇ≈ÅAÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇÃîwå„DždžÇÈÉEÉCÉìÉhÉEÇÃè„Ç…ÉJÅ[É\ÉãÇà⁄ìÆÇµÇƒÇ›Ç‹Ç∑ÅBÅuâÊñ è„Ç…É_ÉCÉAÉçÉOǙdžÇÈÇÃÇ≈ÅADZÇÃÉEÉCÉìÉhÉEÇÕàÍî‘éËëOÇ…ï\é¶Ç≥ÇÍǃǢNjÇπÇÒÅB...ÅvǻǫÇÃèÓïÒÇä‹ÇfiÉoÉãÅ[ÉìÇ™ï\é¶Ç≥ÇÍÅAÉEÉCÉìÉhÉEÇÃàÍïîÇ™ÉoÉãÅ[ÉìÇ…ÇÊǡǃâBÇ≥ÇÍÇ‹Ç∑ÅBDZDZÇ≈ÅAÅuÉZÉåÉNÉ^ÅvÇå©ÇƒÇ≠ÇæÇ≥Ç¢ÅBÅuÉZÉåÉNÉ^ÅvÇÕé¿çsÇí‚é~ǵǃǢNjÇ∑ÅBÉoÉãÅ[ÉìÇ…ÇÊǡǃçUåÇÇéÛÇØÇΩÉEÉCÉìÉhÉEÇÕǪÇÍÇ…ëŒÇ∑ÇÈçXêVÇÃÉyÉìÉfÉBÉìÉOÇçsǡǃǮÇËÅAǪÇÃçXêVÇÕÉvÉçÉOÉâÉÄÇÃÉCÉxÉìÉgÉãÅ[ÉvåoóRÇ≈ÇÕÇ»Ç≠ÅAModalDialog
ÉgÉâÉbÉvåoóRÇ≈é¿çsÇ≥ÇÍÇÈÇΩÇflÅAçXêVÇÕíÒãüÇ≥ÇÍÇ‹ÇπÇÒÅBǪÇÃåãâ ÅAëºÇÃÇ∑Ç◊ǃÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ëŒÇµÇƒéûä‘ÇÕí‚é~ǵNjÇ∑ÅB
íçà”:
DZÇÃÇÊǧǻåªè€ÇÕÅAçXêVÇ™É_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇΔìØÇ∂ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ëŒÇ∑ÇÈLJÇÃÇ≈džÇÈèÍçáÇ…ÇÃÇ›î≠ê∂ǵNjÇ∑ÅBï ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉì
(Finder ǻǫ)
ÇÃÉEÉCÉìÉhÉEÇÉoÉãÅ[ÉìÇ≈âBǵǃǢÇÈèÍçáÅAǪÇÃçXêVÇÕê≥èÌÇ…èàóùÇ≥ÇÍÇ‹Ç∑ÅB
|
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
ñ‚ëËÇâÒîÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@
DZÇÃÇÊǧǻåªè€ÇÃî≠ê∂ÇîÇØÇÈÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìì‡Ç≈ÇΔÇËǧÇÈ
2 ǬÇÃëIëéàǙdžÇËÇ‹Ç∑ÅBÇ‹Ç∏ëÊ 1
ÇÃëIëéàÇÕÅAÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇäJÇ≠ÇΔÇ´Ç…ÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìì‡Ç…ëºÇÃÉIÅ[ÉvÉìÉEÉBÉìÉhÉEÇécÇ≥ǻǢÇΔǢǧï˚ñ@Ç≈Ç∑ÅBǵǩǵÅADZÇÃëIëéàÇ™èÌÇ…åªé¿ìIÇ»âåàï˚ñ@ÇΔǢǶǻǢDZÇΔÇÕñæÇÁÇ©Ç≈Ç∑ÅB
ÇÊÇËê≥ǵǢëÊ 2
ÇÃâåàï˚ñ@ÇÕÅAÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÇÃì‡ïîÇ©ÇÁÇ∑Ç◊ǃÇÃÉEÉBÉìÉhÉEÇÃçXêVÇçsǧÇÊǧǻÉÅÉJÉjÉYÉÄÇé©ÇÁíÒãüÇ∑ÇÈDZÇΔÇ≈Ç∑ÅB
ÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉ (ÅwInside
Macintosh:Macintosh Toolbox EssentialsÅxÇÃÅuWriting an Event
Filter Function for Alert and Modal Dialog
BoxesÅvÇ≈ê‡ñæÇ≥ÇÍǃǢNjÇ∑)
ÇÕÅADZÇÃñ‚ëËÇÃâåàÇ…égópÇ≈Ç´ÇÈìKêÿÇ»ÉcÅ[ÉãÇΔǢǶNjÇ∑ÅBDZÇÃèÍçáÅAÉAÉvÉäÉPÅ[ÉVÉáÉìì‡Ç…ï\é¶Ç∑ÇÈÇ∑Ç◊ǃÇÃÉ_ÉCÉAÉçÉOÇ‹ÇΩÇÕÉAÉâÅ[ÉgÇ…íPèÉÇ»ÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇí«â¡Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBǵǩLJÅAëÂïîï™ÇÃÉPÅ[ÉXÇ≈ÇÕÅAÇ∑Ç◊ǃÇÃÉ_ÉCÉAÉçÉOÇ…ìØÇ∂ÉtÉBÉãÉ^Çí«â¡Ç≈Ç´ÇÈÇΩÇflÅAó]ï™Ç»ÉRÅ[ÉhÇëÂó Ç…èëÇ≠ïKóvLJdžÇËÇ‹ÇπÇÒÅB
ÇΩÇæÇµÅADZÇÃëIëéàÇçÃópÇ∑ÇÈÇΔÇ´Ç…ÇÕé·ä±ÇÃèÄîıÇ™ïKóvÇ…Ç»ÇËÇ‹Ç∑ÅBÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇÕÅAîCà”ÇÃÉEÉCÉìÉhÉEÇ…ëŒÇ∑ÇÈï`âÊÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoÇ∑ï˚ñ@ÇéùÇ¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBDZÇÍÇé¿åªÇ∑ÇÈÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉììΔé©ÇÃïKóvèåèÇ‚ÉfÉxÉçÉbÉpÇÃÉvÉçÉOÉâÉ~ÉìÉOÉXÉ^ÉCÉãÇ…ÇÊǡǃÅAÇ≥NjǥNjǻï˚ñ@Ç™ë∂ç›ÇµÇ‹Ç∑ÅBï`âÊÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Çä‹ÇfiÉEÉCÉìÉhÉEÉRÉìÉgÉçÅ[ÉãÉIÉuÉWÉFÉNÉgÇçÏê¨ÇµÇƒÇ‡Ç©Ç‹Ç¢Ç‹ÇπÇÒǵÅAÉÅÉCÉìÉCÉxÉìÉgÉãÅ[ÉvÇ≈çsǡǃǢÇÈÇÃÇΔìØÇ∂É`ÉFÉbÉNÇΔÉfÉBÉXÉpÉbÉ`ÇëgÇ›çûÇÒÇ≈LJǩNjǢNjÇπÇÒÅBÇ‹ÇΩÅAç≈ìKÇ≈džÇÈÇΔévÇÌÇÍÇÈï ÇÃï˚ñ@ÇégópÇ∑ÇÈDZÇΔLJâ¬î\Ç≈Ç∑ÅB
ç≈LJÉVÉìÉvÉãÇ≈äÓñ{ìIÇ»ï˚ñ@ÇÕÅAéüÇ…é¶Ç∑ÇÊǧDžÅAÉEÉCÉìÉhÉEÉåÉRÅ[Éh
refCon
ÇÃíÜÇ…ï`âÊÉvÉçÉVÅ[ÉWÉÉÇ…ëŒÇ∑ÇÈÉtÉâÉOÇëgÇ›çûÇ›ÅArefCon
ÇÃílÇ…äÓÇ√Ç¢ÇΩìΔé©ÇÃï`âÊÉãÅ[É`ÉìÉxÉNÉ^ÇéùǬDZÇΔÇ≈Ç∑ÅB
/* ǫDZǩï ÇÃèÍèäÇ≈íËã`Ç≥ÇÍǃǢÇÈÉEÉCÉìÉhÉEï`âÊÉvÉçÉVÅ[ÉWÉÉ */
Boolean MyDrawProc (WindowPtr windowToDraw) {
Boolean returnVal = true;
Å@
/* ǪÇÍà»ëOÇ…ÉEÉCÉìÉhÉEÇ…äiî[ǵǃǢÇΩílÇ */
/* ÉIÉtÇ…Ç∑ÇÈ */
switch (GetWRefCon(windowToDraw)) {
case kMyClipboard: /* é©ï™ÇÃÉNÉäÉbÉvÉ{Å[ÉhÇï`âÊÇ∑ÇÈ */
DrawMyClip (windowToDraw);
break;
case kMyDocument: /* èëófiÇÃì‡óe */
DrawMyDoc (windowToDraw);
break;
default: /* ÉEÉCÉìÉhÉEÇÃï`âÊÇîÇØÇÈÇΩÇflÇ…ÅAëºÇÃDZÇΔÇÕâΩLJçsÇÌǻǢ */
returnVal = false;
/* DZÇÍÇÕé©ï™Ç…ä÷åWǻǢ */
break;
}
Å@
/* DZÇÃñflÇËílÇÕÅAÉtÉBÉãÉ^ì‡ïîÇ©ÇÁ Dialog Manager Ç */
/* åƒÇ—èoǵÇΩÇΔÇ´Ç…ÅAçXêVÇèàóùǵÇΩÇ©Ç«Ç§Ç©Ç Dialog Manager Ç… */
/* í ímÇ∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈÅBí èÌÇÃégóp (ǬNjÇËÅAÉÅÉCÉìÉCÉxÉìÉgÉãÅ[Év */
/* Çà updateEvent Ç÷ÇÃâûìö) Ç≈ÇÕÅADZÇÃò_óùílÇÕïKóvǻǢǙÅA */
/* ì¡Ç…âΩÇÁÇ©ÇÃè·äQÇ…Ç»ÇÈDZÇΔLJǻǢ */
Å@
return (returnVal);
}
ÉEÉBÉìÉhÉEÇçÏê¨Ç∑ÇÈÇΔÇ´Ç…ÉtÉâÉOÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB
myWindowPtr = GetNewWindow (kMyWindowID, nil, (WindowPtr)-1);
SetWRefCon (myWindowPtr, (long)myDrawingProcFlag);
ÉtÉBÉãÉ^ì‡ÇÃçXêVèàóùÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
/* çXêVÇ™É_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇ…ëŒÇ∑ÇÈLJÇÃÇ≈džÇÈèÍçáÅAí èÌÇà ModalDialog ÇÕ
ïKóvÇ…âûÇ∂ǃÉ_ÉCÉAÉçÉOÇÃçƒï`âÊÇçsǧÇΩÇflÅADZÇÃçXêVÇñ≥éãÇ∑ÇÈ */
if(theEventIn->what == updateEvt && theEventIn->message != myDialogPtr ) {
/* ìΔé©ÇÃï`âÊÉãÅ[É`ÉìÇ…ì¸ÇÈÅBëŒè€ÇΔÇ»ÇÈÉEÉCÉìÉhÉEÇèäóLǵǃǢÇÈèÍçáÇÕÅA
ǪÇÃÉEÉCÉìÉhÉEÇ™çƒï`âÊÇ≥ÇÍÇÈDZÇΔÇ…Ç»ÇÈ */
return (MyDrawProc ((WindowPtr)theEventIn->message));
}
MPW Pascal ÇÃèÍçá
{ DZÇÃä÷êîÇÃñflÇËílÇÕÅAÉtÉBÉãÉ^ì‡ïîÇ©ÇÁ Dialog Manager ÇåƒÇ—èoǵÇΩÇΔÇ´Ç…ÅA }
{ çXêVÇèàóùǵÇΩÇ©Ç«Ç§Ç©Ç Dialog Manager Ç…í ímÇ∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈÅB }
{ í èÌÇÃégóp (ǬNjÇËÅAÉÅÉCÉìÉCÉxÉìÉgÉãÅ[ÉvÇà updateEvent Ç÷ÇÃâûìö) Ç≈ÇÕÅA }
{ DZÇÃò_óùílÇÕïKóvǻǢǙÅAì¡Ç…âΩÇÁÇ©ÇÃè·äQÇ…Ç»ÇÈDZÇΔLJǻǢÅB }
{ ÉEÉCÉìÉhÉEÇÃçƒï`âÊÉvÉçÉVÅ[ÉWÉÉÇÕǫDZǩï ÇÃèÍèäÇ≈íËã`Ç≥ÇÍǃǢÇÈ }
Å@
FUNCTION MyDrawProc(windowToDraw WindowPtr): BOOLEAN;
Å@
BEGIN
CASE GetWRefCon(windowPtr) OF
Å@
kMyClipboard:
BEGIN
DrawMyClipboard(windowToDraw);
MyDrawProc := TRUE;
END;
Å@
kMyDocument:
BEGIN
DrawMyDocument(windowToDraw);
MyDrawProc := TRUE;
END;
Å@
OTHERWISE
MyDrawProc := FALSE;
END; {CASE}
END;
ÉEÉBÉìÉhÉEÇçÏê¨Ç∑ÇÈÇΔÇ´Ç…ÉtÉâÉOÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB
myWindowPtr := GetNewWindow(kMyWindowID, NIL, WindowPtr(-1));
SetWRefCon(myWindowPtr, myDrawingProcFlag);
ÉtÉBÉãÉ^ì‡ÇÃçXêVèàóùÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
FUNCTION MyFilter(currentDialog: DialogPtr; VAR theEventIn: EventRecord;
VAR theItem: INTEGER): BOOLEAN;
Å@
{ çXêVÇ™É_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇ…ëŒÇ∑ÇÈLJÇÃÇ≈džÇÈèÍçáÅAí èÌÇà ModalDialog ä÷êîÇÕ }
{ ïKóvÇ…âûÇ∂ǃÉ_ÉCÉAÉçÉOÇÃçƒï`âÊÇçsǧÇΩÇflÅADZÇÃçXêVÇñ≥éãÇ∑ÇÈ }
Å@
BEGIN
Å@
IF (theEventIn.what = updateEvt AND theEventIn.message <> currentDialog)
BEGIN
MyFilter := MyDrawProc(currentDialog);
END;
END;
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
Ç≥ÇÁÇ…ïKóvÇΔÇ»ÇÈèàóù
ìΔé©ÇÃÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇÉ_ÉCÉAÉçÉOÇ…í«â¡Ç∑ÇÈDZÇΔÇ…ëŒÇ∑ÇÈóBàÍÇÃñ‚ëËÇÕÅAÉfÉxÉçÉbÉpÇ™çXêVÇæÇØÇ≈Ç»Ç≠ǪÇÃëºÇÃèàóùLJçsǧDZÇΔÇ
Dialog Manager Ç™ëOíÒDžǵǃǵNjǧì_DždžÇËÇ‹Ç∑ÅBì¡Ç… Dialog
Manager Ç≈ÇÕÅAÉfÉxÉçÉbÉpÇ™ïWèÄìIÇ»Åuitem 1 Ç÷Çà return
ÉLÅ[ÉGÉCÉäÉAÉXÅvÇÃÉtÉBÉãÉ^èàóùÇé¿çsǵǃǢÇÈÇΔëzíËǵNjÇ∑ÅBDZÇÃÇΩÇflÅAÉfÉxÉçÉbÉpÇÕÉLÅ[ëÄçÏÇÃèàóùÇé©ÇÁÉtÉBÉãÉ^ì‡Ç…èëÇ©Ç»ÇØÇÍnjǻÇÁÇ»Ç≠Ç»ÇËÇ‹Ç∑ÅB
System 7 ÇÃ Dialog Manager
Ç…ÇÕÅADZÇÃèÛãµÇ≈ÉvÉçÉOÉâÉÄÇ…ëŒÇ∑ÇÈïââ◊Çåyå∏Ç∑ÇÈÅAÇ¢Ç≠ǬǩÇÃêVǵǢåƒÇ—èoǵǙópà”Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÁÇÃåƒÇ—èoǵÇÕÅASystem
7 ÇäJî≠Ç∑ÇÈç≈èIíiäKÇ≈çÏê¨Ç≥ÇÍǃÉeÉXÉgÇ≥ÇÍÇΩÇΩÇflÅAÅwInside
MacintoshÅxÇ…ÇÕè⁄ç◊Ç…ãLèqÇ≥ÇÍǃǢNjÇπÇÒÅBDZÇÃÇÊǧǻóùóRÇ©ÇÁÅwInside
MacintoshÅxÇï‚ë´Ç∑ÇÈñ⁄ìIÇ≈ÅuTechnote
1148: Dialog Manager
ÇÃÉwÉãÉpä÷êîÅvÇ™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÁÇÃä÷êîÇégópÇ∑ÇÈÇΔÅASystem
ÇÃÉTÅ[ÉrÉXÇåƒÇ—èoǵǃÅAÉ_ÉCÉAÉçÉOì‡Ç≈ÇÃïWèÄìIÇ»ÉLÅ[ëÄçÏÇí«ê’Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
System 6 Ç≈ÇÃèàóùï˚ñ@
Ç‡ÇøÇÎÇÒÅASystem 7
ÇÊÇËëOÇÃÉVÉXÉeÉÄÇ…ëŒâûǵÇΩÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕÅADZÇÍÇÁÇÃêVǵǢåƒÇ—èoǵÇégópÇ≈ǴǻǢÇΩÇflÅAÉfÉxÉçÉbÉpé©êgÇ™Ç∑Ç◊ǃÇÃèàóùÇçsǧïKóvǙdžÇËÇ‹Ç∑ÅBéüÇ…ÅASystem
7 ÇÃÉtÉBÉãÉ^ÇΔÇŸÇ⁄ìØÇ∂èàóùÇçsǧ System 6.0.x
Ç…ëŒâûǵÇΩÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇÃÉTÉìÉvÉãÇé¶ÇµÇ‹Ç∑ÅB
/* System 7 ÇÊÇËëOÇÃÉVÉXÉeÉÄÇ…ëŒâûǵÇΩÉ_ÉCÉAÉçÉO ÉtÉBÉãÉ^ */
#define kMyButtonDelay 8
Å@
/* ÉcÅ[ÉãÉ{ÉbÉNÉXÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇÈÇΩÇflÅA'pascal' ÇΔǵǃêÈåæÇ∑ÇÈ */
pascal Boolean MyFilter (DialogPtr currentDialog,
EventRecord *theEventIn, short *theDialogItem) {
Boolean returnVal = false;
long waitTicks;
short itemKind; /* GetDItem Ç≈égópÇ∑ÇÈÇ¢Ç≠ǬǩÇÃÉeÉìÉ|ÉâÉäïœêî */
Handle itemHandle;
Rect itemRect;
Å@
if (theEventIn->what == updateEvt && theEventIn->message != myDialogPtr) {
/* myDialogPtr ÇÕÉ_ÉCÉAÉçÉOÇçÏê¨ÇµÇΩèÍèäÇ≈íËã`Ç≥ÇÍǃǢÇÈÅB
çXêVÇ™É_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇ…ëŒÇ∑ÇÈLJÇÃÇ≈džÇÈèÍçáÅAí èÌÇà ModalDialog ÇÕ
ïKóvÇ…âûÇ∂ǃÉ_ÉCÉAÉçÉOÇÃçƒï`âÊÇçsǧÇΩÇflÅADZÇÃçXêVÇñ≥éãÇ∑ÇÈ */
Å@
returnVal = MyDrawProc (theEventIn->message); /* ìΔé©ÇÃï`âÊÉãÅ[É`ÉìÇ…ì¸ÇÈ */
} else {
/* ǪÇÍÇ™çXêVÇ≈Ç»ÇØÇÍÇŒÅAÉLÅ[ëÄçÏÇ≈džǡÇΩǩǫǧǩÇämîFÇ∑ÇÈÅBreturn Ç‹ÇΩÇÕ enter ÉLÅ[
ÇÉ`ÉFÉbÉNǵÅAitem 1 ÇΔǵǃǪÇÃÉGÉCÉäÉAÉXÇçÏê¨Ç∑ÇÈÅBÇ‹ÇΩÅADZDZDžÇÕ item 2 ÇÃÉGÉCÉäÉAÉX
ÇçÏê¨Ç∑ÇÈ escape ÉLÅ[Ç…ëŒÇ∑ÇÈÉ`ÉFÉbÉNLJëgÇ›çûÇÒÇ≈Ç¢ÇÈÇ™ÅAïKÇ∏ǵLJDZÇÍÇégópÇ∑ÇÈïKóvÇÕ
ǻǢ */
Å@
if ((theEventIn->what == keyDown) || (theEventIn->what == autoKey)) {
/* ǪÇÍÇÕÉLÅ[ÇæÇ¡ÇΩ */
Å@
switch (theEventIn->message & charCodeMask) {
case kReturnKey:
case kEnterKey:
*theDialogItem = ok; /* åªç›ÇÃçÄñ⁄Ç™âΩÇ≈džǡǃLJ "OK" çÄñ⁄Ç…ïœçXÇ∑ÇÈÅB
ok ÇÕ Dialogs.h Ç≈íËã`Ç≥ÇÍǃǢÇÈÅB
DZÇÃÇΔÇ´ÇÕÅAÉÜÅ[ÉUÇ™ê≥ǵǢÉtÉBÅ[ÉhÉoÉbÉNÇìæÇÁÇÍÇÈÇÊǧDžÅA
É{É^ÉìÇîΩì]Ç≥ÇπÇÈïKóvǙdžÇÈ */
GetDItem (currentDialog, ok, &itemKind, &itemHandle, &itemRect);
HiliteControl ((ControlHandle)itemHandle, inButton); /* É{É^ÉìÇîΩì]Ç≥ÇπÇÈ */
Delay (kMyButtonDelay, &waitTicks); /* DZÇÍÇ™å©Ç¶ÇÈÇÊǧDžñÒ 8 ÉeÉBÉbÉNë“ã@Ç∑ÇÈ */
HiliteControl ((ControlHandle)itemHandle, false); /* ǪÇÃå„ÅAí èÌÇÃèÛë‘Ç…ñflÇÈ */
Å@
returnVal = true; /* DZÇÃÉCÉxÉìÉgÇèàóùǵÇΩDZÇΔÇ Dialog Manager Ç…í ímÇ∑ÇÈ */
break;
/* DZÇÍÇÕÅAescape ÉLÅ[Ç… item 2 (í èÌÇÕ "ÉLÉÉÉìÉZÉã" É{É^Éì) ÇΔìØÇ∂ÉtÉBÉãÉ^èàóùÇçsǧ */
case kEscKey:
*theDialogItem = cancel; /* cancel ÇÕ Dialogs.h Ç≈ 2 ÇΔíËã`Ç≥ÇÍǃǢÇÈ */
GetDItem (currentDialog, cancel, &itemKind, &itemHandle, &itemRect);
HiliteControl ((ControlHandle)itemHandle, inButton);
Delay (kMyButtonDelay, &waitTicks); /* DZÇÍÇ™å©Ç¶ÇÈÇÊǧDžñÒ 8 ÉeÉBÉbÉNë“ã@Ç∑ÇÈ */
HiliteControl ((ControlHandle)itemHandle, false);
Å@
returnVal = true; /* DZÇÃÉCÉxÉìÉgÇèàóùǵÇΩDZÇΔÇ Dialog Manager Ç…í ímÇ∑ÇÈ */
break;
}
}
}
Å@
return (returnVal);
}
MPW Pascal ÇÃèÍçá
{ System 7 ÇÊÇËLJëOÇÃÉVÉXÉeÉÄÇ…ëŒâûǵÇΩÉtÉBÉãÉ^ÇÕéüÇÃÇÊǧDžǻÇÈ }
Å@
FUNCTION MyFilter(currentDialog: DialogPtr; VAR theEventIn:
EventRecord; VAR theItem: INTEGER): BOOLEAN;
CONST
kMyButtonDelay = 8;
VAR
itemKind : INTEGER;
itemHandle : Handle;
itemRect : Rect;
savePort : GrafPtr;
waitTicks : LONGINT;
Å@
BEGIN
{ çXêVÇ™É_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇ…ëŒÇ∑ÇÈLJÇÃÇ≈džÇÈèÍçáÅAí èÌÇà ModalDialog ä÷êîÇÕ }
{ ïKóvÇ…âûÇ∂ǃÉ_ÉCÉAÉçÉOÇÃçƒï`âÊÇçsǧÇΩÇflÅADZÇÃçXêVÇñ≥éãÇ∑ÇÈ }
IF (theEventIn.what = updateEvt AND theEventIn.message <> currentDialog)
MyFilter := MyDrawProc(theEventIn.message)
ELSE { it wasn't an update, see if it was a keystroke }
BEGIN
{ return Ç‹ÇΩÇÕ enter ÉLÅ[ÇÉ`ÉFÉbÉNǵÅA"ok" çÄñ⁄ÇΔǵǃǪÇÃÉGÉCÉäÉAÉXÇçÏê¨Ç∑ÇÈ }
{ DZDZDžÇÕ "ÉLÉÉÉìÉZÉã" çÄñ⁄ÇÃÉGÉCÉäÉAÉXÇΔÇ»ÇÈ escape ÉLÅ[Ç…ëŒÇ∑ÇÈÉ`ÉFÉbÉNLJ }
{ ëgÇ›çûÇÒÇ≈Ç¢ÇÈÇ™ÅAïKÇ∏ǵLJDZÇÍÇégópÇ∑ÇÈïKóvÇÕǻǢ }
IF ((theEventIn.what = keyDown) OR (theEventIn.what = autoKey))
BEGIN { ǪÇÍÇÕÉLÅ[ÇæÇ¡ÇΩ }
Å@
CASE CHR(BAnd(theEventIn.message, charCodeMask)) OF
Å@
kReturnKey, kEnterKey:
BEGIN
GetDItem(currentDialog, ok, itemKind, itemHandle, itemRect);
HiliteControl(ControlHandle(itemHandle), TRUE);
Delay(kMyButtonDelay , waitTicks); { DZÇÍÇ™å©Ç¶ÇÈÇÊǧDžñÒ 8 ÉeÉBÉbÉNë“ã@Ç∑ÇÈ }
HiliteControl(ControlHandle(itemHandle), FALSE); { ǪÇÃå„ÅAí èÌÇÃèÛë‘Ç…ñflÇÈ }
MyFilter := TRUE; { DZÇÃÉCÉxÉìÉgÇèàóùǵÇΩDZÇΔÇ Dialog Manager Ç…í ímÇ∑ÇÈ }
END;
Å@
kEscKey:
BEGIN
theItem := cancel;
GetDItem(currentDialog, cancel, itemKind, itemHandle, itemRect);
HiliteControl(ControlHandle(itemHandle), TRUE);
Delay(kMyButtonDelay , waitTicks); { DZÇÍÇ™å©Ç¶ÇÈÇÊǧDžñÒ 8 ÉeÉBÉbÉNë“ã@Ç∑ÇÈ }
HiliteControl(ControlHandle(itemHandle), FALSE); { ǪÇÃå„ÅAí èÌÇÃèÛë‘Ç…ñflÇÈ }
MyFilter := TRUE; { DZÇÃÉCÉxÉìÉgÇèàóùǵÇΩDZÇΔÇ Dialog Manager Ç…í ímÇ∑ÇÈ }
END;
Å@
END; {CASE}
END;
END;
END;
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
åãò_
â ǃǵǻǢçXêVÇÕâΩLJêVǵǢñ‚ëËÇ≈ÇÕdžÇËÇ‹ÇπÇÒÇ™ÅAâ ǃǵǻǢçXêVDžǬǢǃâΩÇÁÇ©ÇÃëŒèàÇçsǧDZÇΔÇ™èdóvÇ≈Ç∑ÅBÇΔÇÕǢǶÅADZÇÃñ‚ëËÇ…ä÷ǵǃǪÇÍÇŸÇ«ó]ï™Ç»çÏãΔÇ™î≠ê∂Ç∑ÇÈÇÌÇØÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÇ∑Ç◊ǃÇÃÉ_ÉCÉAÉçÉOÇ®ÇÊÇ—ÉAÉâÅ[ÉgÇ…íPèÉÇ»ÉtÉBÉãÉ^Çí«â¡ÇµÅAÉEÉCÉìÉhÉEç\ë¢ëÃÇÃíÜÇ…ï`âÊÉvÉçÉVÅ[ÉWÉÉÇ÷ÇÃÉtÉâÉOÇíuÇ≠ÇæÇØÇ≈Ç∑ÅB
ǪÇÃåãâ ÅAÉVÉXÉeÉÄÇÕâ~ääÇ…é¿çsÇåpë±Ç∑ÇÈÇÕÇ∏Ç≈Ç∑ÅBÇ‹ÇΩÅAåãâ ìIÇ…ÅAÉÜÅ[ÉUÇÕèÌÇ…ÅAàÍïîÇ™åáÇØÇΩÉEÉCÉìÉhÉEÇ≈ÇÕÇ»Ç≠ÅAñ{óàÇÃï˚ñ@Ç≈ï\é¶Ç≥ÇÍÇΩÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉEÉCÉìÉhÉEÇå©ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
éQçlï∂å£
â¸í˘ÇÃóöó
- 1991îN10åéÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃèâî≈Ç™ÅuTechnote TB 37ÅvÇΔǵǃåˆäJÇ≥ÇÍNjǵÇΩÅB
- 1991îNÇΔ1999îNÇ…ÉTÉìÉvÉãÉRÅ[ÉhÇÃí«â¡ÇΔâ¸í˘Ç™çsÇÌÇÍNjǵÇΩÅB
- 1999îN1åéÅAíÒé¶ÇµÇΩÉAÉCÉfÉAÇÇÊÇËÇÊÇ≠êÆóùÇ∑ÇÈÇΩÇflÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃì‡óeÇÕçXêVÇ≥ÇÍNjǵÇΩÅB
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
|